/*
线程三种实现方式
1.继承Thread类
2.实现Runnable接口
3.Callable接口和Future接口实现


最后分为2种
不可以得到结果的第12种
Thread比较简单，扩展性差，不可以继承其他类
Runnable扩展性强，但编程相对复杂

可以得到结果的第3种


多线程常用方法
名称，睡眠，设置优先级，设置守护线程，礼让线程，插入线程


线程的生命周期
一个对象用start()方法后进入抢夺cpu的准备阶段,也就是在抢的过程
有执行资格，无执行权


抢到cpu后有执行资格和执行权，开始运行代码，过程中会被其他的抢走，
回到就绪阶段，方法运行完线程就会死亡变成垃圾。

如果运行过程种遇到sleep或者其他阻塞方法，无执行资格无执行权，不能
抢啥也不能干睡眠时间到了后就会变成有执行资格无执行权

*/
//等待唤醒机制，有生产者，消费者，控制两者的第三者
//阻塞队列可以替换第三者